/*********************************************************************************
 * The contents of this file are subject to the Common Public Attribution
 * License Version 1.0 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.openemm.org/cpal1.html. The License is based on the Mozilla
 * Public License Version 1.1 but Sections 14 and 15 have been added to cover
 * use of software over a computer network and provide for limited attribution
 * for the Original Developer. In addition, Exhibit A has been modified to be
 * consistent with Exhibit B.
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 *
 * The Original Code is OpenEMM.
 * The Original Developer is the Initial Developer.
 * The Initial Developer of the Original Code is AGNITAS AG. All portions of
 * the code written by AGNITAS AG are Copyright (c) 2009 AGNITAS AG. All Rights
 * Reserved.
 *
 * Contributor(s): AGNITAS AG. 
 ********************************************************************************/

package org.agnitas.cms.dao.impl;

import javax.sql.*;
import org.agnitas.cms.utils.*;
import org.springframework.context.*;
import org.springframework.jdbc.core.*;
import org.springframework.jdbc.support.incrementer.*;

/**
 * @author Vyacheslav Stepanov
 */
public class CmsDaoImpl implements ApplicationContextAware {

	protected JdbcTemplate createJdbcTemplate() {
		return new JdbcTemplate(getDataSource());
	}

	protected DataSource getDataSource() {
		return (DataSource) applicationContext.getBean("cmsDataSource");
	}

	/**
	 * Holds value of property applicationContext.
	 */
	protected ApplicationContext applicationContext;

	/**
	 * Setter for property applicationContext.
	 *
	 * @param applicationContext New value of property applicationContext.
	 */
	public void setApplicationContext(ApplicationContext applicationContext) {
		this.applicationContext = applicationContext;
	}

	public DataFieldMaxValueIncrementer createIncrement(
			final String sequenceName) {


		if(CmsUtils.isOracleDB()) {
			return new OracleSequenceMaxValueIncrementer(getDataSource(),
					sequenceName);
		}
		if(CmsUtils.isMySQLDB()) {
			return new MySQLMaxValueIncrementer(getDataSource(), sequenceName,
					"value");
		}
		return null;
	}

}